package br.com.cast.view.produto;

import org.apache.wicket.ajax.AjaxRequestTarget;
import org.apache.wicket.ajax.markup.html.form.AjaxButton;
import org.apache.wicket.markup.html.form.Form;
import org.apache.wicket.markup.html.form.RequiredTextField;
import org.apache.wicket.model.CompoundPropertyModel;
import org.apache.wicket.spring.injection.annot.SpringBean;
import org.apache.wicket.validation.validator.StringValidator;

import br.com.cast.exception.ProdutoCadastrado;
import br.com.cast.modelo.Produto;
import br.com.cast.nf.NotaFiscal.HomePage;
import br.com.cast.service.IProdutoService;
import br.com.cast.util.ComponentUtil;

public class FormProduto extends Form<Produto> {

	
	@SpringBean
	private IProdutoService iProdutoService;
	
	public FormProduto(String id) {
		super(id, new CompoundPropertyModel<Produto>(new Produto()));

		criaCampoDescicao();
		criaCampoValor();
		
		
		
		add(new AjaxButton("salvar") {
			@Override
			public void onSubmit(AjaxRequestTarget target,Form<?> form) {

				Produto produto = (Produto) form.getDefaultModelObject();
				HomePage template = ComponentUtil.getTemplate(this);
				
				try {
					
					iProdutoService.salvar(produto);
					redirecionaListar(target, template);
					template.success("Registro inserido com sucesso!");	
				} catch (ProdutoCadastrado e) {
					error(e.getMessage());
				}
			}
			
			@Override
			public void onError(AjaxRequestTarget target, Form<?> form) {
				HomePage template = ComponentUtil.getTemplate(this);
				target.add(template.get("msgErro"));
				target.add(template.get("msgSucesso"));
			}
		});

	}

	private void criaCampoValor() {
		add(new RequiredTextField<>("valor"));

	}

	private void criaCampoDescicao() {
		add(new RequiredTextField<>("descricao")
				.add(new StringValidator(0, 50)));
	}
	

	private void redirecionaListar(AjaxRequestTarget target, HomePage template) {
		ListarProduto listar = new ListarProduto(HomePage.conteudo);
		template.replace(listar);
		target.add(listar);
	}
}
